<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
                xmlns:p="http://primefaces.org/ui"
                template="/resources/modelo_facelets.xhtml"
                xmlns:h="http://java.sun.com/jsf/html"
                xmlns:f="http://java.sun.com/jsf/core">    

    <ui:define name="content">     

        <p:panel id="paineladicionar" header="Cadastrar Solicitante" >

            <p:messages/>

            <h:form id="formAdicionar">

                <h:panelGrid columns="2" cellspacing="20px" width="100%" >

                    <h:outputText value="Nome do Solicitante: " />  

                    <p:inputText id="nomeSolicitante" 
                                 value="#{solicitante.nome}" 
                                 required="true" 
                                 requiredMessage="O nome do solicitante é obrigatório!"
                                 label="Nome do Solicitante">  
                        <f:validateLength minimum="3" />  

                    </p:inputText>              
                    
                </h:panelGrid>                

                <p:separator/>

                <p:dataTable id="tabelaAtributos"  
                             value="#{solicitante.tabelaAtributos}"
                             var="atributoPadrao"                                          
                             rows="10"  
                             pageLinks="5"
                             rowsPerPageTemplate="5,10,15"
                             paginator="true"   
                             paginatorAlwaysVisible="false"
                             emptyMessage="Nenhum registro encontrado."
                             paginatorPosition="bottom"                             
                             paginatorTemplate="{RowsPerPageDropdown} {CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"                             
                             >
                    
                    <p:column headerText="Atributos">
                        <h:outputText value="#{atributoPadrao.nomeAtributo}"/>                                            
                    </p:column> 

                    <p:column headerText="Valores">

                        <p:inputText id="atributoTexto"
                                     value="#{atributoPadrao.valorTexto}"
                                     rendered="#{atributoPadrao.tipo eq solicitante.tipoTexto}"
                                     required="true"
                                     requiredMessage="Os valores dos atributos são obrigatórios!"/>       

                        <p:inputTextarea id="atributoTextoLongo"
                                         value="#{atributoPadrao.valorTextoLongo}"        
                                         style="width: 100%"
                                         rendered="#{atributoPadrao.tipo eq solicitante.tipoTextoLongo}"
                                         required="true"
                                         requiredMessage="Os valores dos atributos são obrigatórios!"/>

                        <p:inputText id="atributoCaracter"
                                     value="#{atributoPadrao.valorChar}"
                                     rendered="#{atributoPadrao.tipo eq solicitante.tipoCaracter}"                                     
                                     maxlength="1"
                                     required="true"
                                     requiredMessage="Os valores dos atributos são obrigatórios!"/>

                        <p:inputText id="atributoNumero"
                                     value="#{atributoPadrao.valorNumero}"
                                     rendered="#{atributoPadrao.tipo eq solicitante.tipoNumero}"
                                     required="true"
                                     requiredMessage="Os valores dos atributos são obrigatórios!">
                            <f:convertNumber groupingUsed="false"/>
                        </p:inputText>                        
                        
                        <p:selectBooleanCheckbox
                            id="atributoBooleano"
                            value="#{atributoPadrao.valorBooleano}"
                            rendered="#{atributoPadrao.tipo eq solicitante.tipoBooleano}"/> 

                        <p:inputMask id="atributoData"
                                     value="#{atributoPadrao.valorData}"
                                     mask="99/99/9999"
                                     rendered="#{atributoPadrao.tipo eq solicitante.tipoData}"
                                     required="true"
                                     requiredMessage="Os valores dos atributos são obrigatórios!">
                            <f:convertDateTime pattern="dd/MM/yyyy" />
                        </p:inputMask> 

                    </p:column> 

                </p:dataTable>

                <p:separator/>

                <p:commandButton value="Adicionar" 
                                 actionListener="#{solicitante.adicionarSolicitante()}" 
                                 update=":paineladicionar :paineltabela"/>
            </h:form>

        </p:panel>               

        <p:panel id="paineltabela" header="Solicitantes Cadastrados">

            <h:form id="formTabela">

                <p:dataTable id="tabela"                             
                             value="#{solicitante.tabela}"
                             var="itemSolicitante"                                     
                             rows="10"
                             pageLinks="5"
                             rowsPerPageTemplate="5,10,15"
                             selectionMode="single"
                             selection="#{solicitante.solicitanteSelecionado}"
                             paginator="true"       
                             emptyMessage="Nenhum registro encontrado."
                             paginatorPosition="bottom"                             
                             paginatorTemplate="{RowsPerPageDropdown} {CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"                             
                             >                 

                    <p:column style="width:16px">  
                        <p:rowToggler />  
                    </p:column>  

                    <p:column headerText="Nome do Solicitante" sortBy="#{itemSolicitante.nome}" filterBy="#{itemSolicitante.nome}">
                        <h:outputText value="#{itemSolicitante.nome}"/>                              
                    </p:column>   

                    <f:facet name="footer">
                        <p:commandButton value="Excluir" action="#{solicitante.removerSolicitante()}" update=":paineladicionar :paineltabela" />
                    </f:facet>

                    <p:rowExpansion>

                        <p:dataTable id="tabelaTexto"  
                                     value="#{itemSolicitante.atributosSolicitante}"
                                     var="atributoCadastrado"                                          
                                     rows="10"                                       
                                     pageLinks="5"
                                     rowsPerPageTemplate="5,10,15"
                                     paginator="true"   
                                     paginatorAlwaysVisible="false"
                                     emptyMessage="Nenhum registro encontrado."
                                     paginatorPosition="bottom"                             
                                     paginatorTemplate="{RowsPerPageDropdown} {CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink}"                             
                                     >

                            <p:column headerText="Atributos">
                                <h:outputText value="#{atributoCadastrado.nomeAtributo}"/>
                            </p:column> 

                            <p:column headerText="Valores">
                                
                                <p:cellEditor>  

                                    <f:facet name="output">  
                                        <h:outputText value="#{atributoCadastrado.valorTexto}"
                                                      rendered="#{atributoCadastrado.tipo eq solicitante.tipoTexto}"/>  

                                        <h:outputText value="#{atributoCadastrado.valorNumero}"
                                                      rendered="#{atributoCadastrado.tipo eq solicitante.tipoNumero}"/>

                                        <p:inputTextarea value="#{atributoCadastrado.valorTextoLongo}"
                                                         style="width: 100%"
                                                         readonly="true"
                                                         rendered="#{atributoCadastrado.tipo eq solicitante.tipoTextoLongo}"/>

                                        <h:outputText value="#{atributoCadastrado.valorChar}"
                                                      rendered="#{atributoCadastrado.tipo eq solicitante.tipoCaracter}"/>

                                        <h:outputText value="#{atributoCadastrado.valorData}"
                                                      rendered="#{atributoCadastrado.tipo eq solicitante.tipoData}">
                                            <f:convertDateTime pattern="dd/MM/yyyy" />
                                        </h:outputText>

                                        <p:selectBooleanCheckbox value="#{atributoCadastrado.valorBooleano}"                                                                 
                                                                 disabled="true"                                                                 
                                                                 rendered="#{atributoCadastrado.tipo eq solicitante.tipoBooleano}"/>

                                    </f:facet>  

                                    <f:facet name="input">  

                                        <p:inputText value="#{atributoCadastrado.valorTexto}"
                                                     rendered="#{atributoCadastrado.tipo eq solicitante.tipoTexto}"
                                                     required="true"
                                                     requiredMessage="Os valores dos atributos são obrigatórios!"/>  

                                        <p:inputText value="#{atributoCadastrado.valorNumero}"
                                                     rendered="#{atributoCadastrado.tipo eq solicitante.tipoNumero}"
                                                     required="true"
                                                     requiredMessage="Os valores dos atributos são obrigatórios!">
                                            <f:convertNumber groupingUsed="false"/>
                                        </p:inputText>

                                        <p:inputTextarea value="#{atributoCadastrado.valorTextoLongo}"        
                                                         style="width: 100%"
                                                         rendered="#{atributoCadastrado.tipo eq solicitante.tipoTextoLongo}"
                                                         required="true"
                                                         requiredMessage="Os valores dos atributos são obrigatórios!"/>

                                        <p:inputText value="#{atributoCadastrado.valorChar}"
                                                     rendered="#{atributoCadastrado.tipo eq solicitante.tipoCaracter}"                                     
                                                     maxlength="1"
                                                     required="true"
                                                     requiredMessage="Os valores dos atributos são obrigatórios!"/>

                                        <p:selectBooleanCheckbox
                                            value="#{atributoCadastrado.valorBooleano}"                                            
                                            rendered="#{atributoCadastrado.tipo eq solicitante.tipoBooleano}"/> 

                                        <p:inputMask value="#{atributoCadastrado.valorData}"                                                                                                          
                                                     mask="99/99/9999"
                                                     rendered="#{atributoCadastrado.tipo eq solicitante.tipoData}"
                                                     required="true"
                                                     requiredMessage="Os valores dos atributos são obrigatórios!">
                                            <f:convertDateTime pattern="dd/MM/yyyy" />
                                        </p:inputMask> 

                                    </f:facet>  

                                </p:cellEditor> 
                            </p:column> 

                            <p:column headerText="Options" style="width:50px">  
                                <p:rowEditor />  
                            </p:column> 
                            
                            <p:ajax event="rowEdit" listener="#{solicitante.atualizarAtributo(atributoCadastrado)}" update=":paineladicionar :paineltabela" />

                        </p:dataTable>

                    </p:rowExpansion>

                </p:dataTable>                                

            </h:form>

        </p:panel>

    </ui:define>

</ui:composition>